package com.mj.queue;

import com.mj.heap.BinaryHeap;
import com.sun.org.apache.regexp.internal.RE;

import java.util.Comparator;

/**
 * 利用二叉堆作为优先队列的底层实现
 * @param <E>
 */
public class PriorityQueue<E> {
    private BinaryHeap<E> heap;

    //允许别人自定义优先级
    public PriorityQueue(Comparator comparator){
        heap = new BinaryHeap<>(comparator);
    }

    public PriorityQueue(){
        this(null);
    }

    // 元素的数量
    public int size() {
        return heap.size();
    }

    // 是否为空
    public boolean isEmpty() {
        return heap.isEmpty();
    }

    // 入队
    public void enQueue(E element) {
        heap.add(element);
    }

    // 出队
    public E deQueue() {
        return heap.remove();
    }

    // 获取队列的头元素
    public E front() {
        return heap.get();
    }

    // 清空
    public void clear() {
        heap.clear();
    }
}
